home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / lang / SmallEiffel.lha / SmallEiffel / lib_show / directory / example018.c < prev    next >
C/C++ Source or Header  |  1998-12-22  |  3KB  |  84 lines

  1. /*
  2. -- ANSI C code generated by :
  3. -- SmallEiffel The GNU Eiffel Compiler -- Release (- 0.79Beta#5)--
  4. -- Copyright (C), 1994-98 - LORIA - UHP - CRIN - INRIA - FRANCE --
  5. -- Dominique COLNET and Suzanne COLLIN -    colnet@loria.fr     --
  6. --                 http://www.loria.fr/SmallEiffel              --
  7. */
  8. #include "example01.h"
  9. /*
  10. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  11. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  12. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  13. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  14. -- this header is kept unaltered, and a notification of the changes is added.
  15. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  16. -- another product.
  17. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  18. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  19. --                       http://www.loria.fr/SmallEiffel
  20. --
  21. */
  22. /* 
  23.    Stack and Registers traversal for PC Linux.
  24.    Addresses decrease as the stack grows.
  25.    Registers are saved using SETJMP().
  26. */
  27.  
  28. void mark_stack_and_registers(void) {
  29.   void** max = stack_bottom;
  30.   void** stack_pointer;
  31.   JMP_BUF registers;
  32.  
  33.   (void)SETJMP(registers);
  34.   stack_pointer=((void**)(®isters));
  35.   while(stack_pointer < max) {
  36.     gc_mark(*(stack_pointer++));
  37.   }
  38. }
  39.  
  40.  
  41. void gc_start(void){
  42. if(gc_is_off)return;
  43. if(garbage_delayed())return;
  44. gcmt_tail_addr=(((char*)(gcmt[gcmt_used-1]))+(gcmt[gcmt_used-1])->size);
  45. ((gc701*)eiffel_root_object)->header.flag=FSOH_UNMARKED;
  46. gc_free571=NULL;
  47. if(na_env1939.store_left>0){
  48. na_env1939.store->header.size=na_env1939.store_left;
  49. na_env1939.store->header.magic_flag=RSOH_FREE;
  50. na_env1939.store_left=0;
  51. }
  52. na_env1939.chunk_list=NULL;
  53. na_env1939.store_chunk=NULL;
  54. if(na_env2135.store_left>0){
  55. na_env2135.store->header.size=na_env2135.store_left;
  56. na_env2135.store->header.magic_flag=RSOH_FREE;
  57. na_env2135.store_left=0;
  58. }
  59. na_env2135.chunk_list=NULL;
  60. na_env2135.store_chunk=NULL;
  61. gc_free474=NULL;
  62. gc_free1405=NULL;
  63. gc_free701=NULL;
  64. gc_free1707=NULL;
  65. gc_free1886=NULL;
  66. if(na_env9.store_left>0){
  67. na_env9.store->header.size=na_env9.store_left;
  68. na_env9.store->header.magic_flag=RSOH_FREE;
  69. na_env9.store_left=0;
  70. }
  71. na_env9.chunk_list=NULL;
  72. na_env9.store_chunk=NULL;
  73. gc_free7=NULL;
  74. gc_free2074=NULL;
  75. gc_free528=NULL;
  76. gc_mark701(eiffel_root_object);
  77. manifest_string_mark1();
  78. once_function_mark();
  79. mark_stack_and_registers();
  80. gc_sweep();
  81. gc_start_count++;
  82. }
  83.  
  84.